IaCで管理するLambdaで更新時に古いバージョンを削除する方法
こんばんは、製造ビジネステクノロジー部の夏目です。
先日AWS LambdaでPythonと.NetのSnapStartが発表されました。
調べてみるとSnapStartはバージョンをキャッシュするものであり、キャッシュしているバージョンに対して課金されるものでした。
なので、今回は最新のバージョン以外を削除するようにIaCで設定する方法について調べました。
SAM (Serverless Application Model)の場合
Transform: AWS::Serverless-2016-10-31
Resources:
Function:
Type: AWS::Serverless::Function
DeletionPolicy: Delete
Properties:
AutoPublishAlias: prod
...
SAMの場合、AutoPublishAlias
に設定したいAliasの名前を記載することで自動的にバージョンが発行されAliasが設定されます。
Propertyとしてバージョンの削除の設定はないが、リソースに対して DeletionPolicy: Delete
を設定することで更新の際に古いバージョンを削除することができる。
CDK (Cloud Development Kit)の場合
import * as cdk from "aws-cdk-lib";
import * as lambda from "aws-cdk-lib/aws-lambda";
import { Construct } from "constructs";
import * as path from "node:path";
export class CdkLatestVersionOnlyStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const myFunction = new lambda.Function(this, "cdk-latest-version", {
runtime: lambda.Runtime.PYTHON_3_13,
handler: "main.handler",
code: lambda.Code.fromAsset(path.join(__dirname, "../src")),
currentVersionOptions: {
removalPolicy: cdk.RemovalPolicy.DESTROY,
},
});
myFunction.addAlias("prod");
}
}
CDKではcurrentVersionOption
にremovalPolicy: cdk.RemovalPolicy.DESTROY
を設定することで古いバージョンを削除してくれるようになる。
なお、Aliasを設定したい場合には addAlias("<Alias名>")
を実行する必要がある。
Terraformの場合
残念ながらTerraformではバージョン発行時に古いバージョンを削除できるようなオプションを見つけることができなかった。
まとめ
以上、更新時に古い方のバージョンを消す方法についてでした。
何かのお役に立てれば幸いです。